package com.woniuxy.controller;

import com.woniuxy.dto.RecordDTO;
import com.woniuxy.entity.Record;
import com.woniuxy.service.SignRecordService;
import com.woniuxy.util.ResponseUtil;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 签约记录控制器
 * 处理签约记录相关的HTTP请求
 */
@RestController
@RequestMapping("/signRecord")
public class SignRecordController {
    @Resource
    private SignRecordService signRecordService;

    /**
     * 根据居民ID查询签约记录
     * @param residentId 居民ID
     * @return 返回指定居民的签约记录
     */
    @GetMapping("/queryByResidentId/{residentId}")
    public ResponseUtil queryByResidentId(@PathVariable("residentId")Integer residentId) {
        return signRecordService.queryByResidentId(residentId);
    }

    /**
     * 根据居民ID查询所有签约记录（包括所有状态）
     * @param residentId 居民ID
     * @return 返回指定居民的所有签约记录
     */
    @GetMapping("/queryAllByResidentId/{residentId}")
    public ResponseUtil queryAllByResidentId(@PathVariable("residentId")Integer residentId) {
        return signRecordService.queryAllByResidentId(residentId);
    }

    /**
     * 查询所有签约记录
     * @return 返回所有签约记录的响应结果
     */
    @GetMapping("/queryAll/{pageNum}/{pageSize}")
    public ResponseUtil queryAll(@PathVariable("pageNum")Integer pageNum, @PathVariable("pageSize")Integer pageSize) {
        return signRecordService.queryAll(pageNum, pageSize);
    }

    /**
     * 删除指定ID的签约记录
     * @param id 记录ID
     * @return 返回删除操作的响应结果
     */
    @DeleteMapping("/delete/{id}")
    public ResponseUtil delete(@PathVariable("id")Integer id) {
        return signRecordService.deleteRecord(id);
    }

    /**
     * 更新签约记录
     * @param recordDTO 签约记录对象
     * @return 返回更新操作的响应结果
     */
    @PutMapping("/update")
    public ResponseUtil update(@RequestBody RecordDTO recordDTO) {
        return signRecordService.updateRecord(recordDTO);
    }

    /**
     * 新增签约记录（小程序提交申请）
     * 强制将 status 置为 0（待支付），后续由Web端医生修改
     */
    @PostMapping
    public ResponseUtil add(@RequestBody Record record){
        return signRecordService.addRecord(record);
    }

    /**
     * 更新签约记录状态（用于支付成功后更新状态）
     * @param requestBody 包含recordId和status的请求体
     * @return 返回更新操作的响应结果
     */
    @PutMapping("/updateStatus")
    public ResponseUtil updateStatus(@RequestBody java.util.Map<String, Object> requestBody) {
        Integer recordId = (Integer) requestBody.get("recordId");
        Integer status = (Integer) requestBody.get("status");
        Record record = new Record();
        record.setRecordId(recordId);
        record.setStatus(status);
        return signRecordService.updateRecord(record);
    }

    /**
     * 查询指定状态的签约记录
     * @param status 状态码
     * @return 响应结果
     */
    @GetMapping("/queryRecordByStatus/{status}")
    public ResponseUtil queryRecordByStatus(@PathVariable("status")Integer status) {
        return signRecordService.queryRecordByStatus(status);
    }
}
